題目:414. Third Maximum Numbe
題目主題:Array, Sorting
我會從最基本的排序開始,本題先不講任何演算法或資料結構。但我想在今天的這個題目來分享一下,我平常做題目時常使用介面上哪些區塊。
做題目的介面如下圖:
基本的操作不多做說明,但這邊想分享的是我平常做題目時常會使用到的幾個區塊:
建議可以看看LeetCode原本的題目說明,這邊是用我的方式說明題目,參考就好。
本題的目標是在一個nums的所有數字中,過濾掉相同的數字以後,找到第三大的數字。如果最終過濾完相同的數字後剩下數字不到三個,直接回傳最大的數字。
約束:
範例1
輸入:nums = [3,2,1]
輸出:1
解釋:這是基本範例,數字各一個,直接找到第三大的數字回傳即可。
範例2
輸入:nums = [1,2]
輸出:2
解釋:數字不到三個,直接輸出最大的數字。
範例3
輸入:nums = [2,2,3,1]
輸出:1
解釋:過濾完重複的數字後會剩3、2、1,因此第三大的數字為1。
建議到這邊先停下來,嘗試自己解解看,若沒有想法可再繼續走下去。
範例:nums = [3, 3, 4, 2, 1, 5]
若因為沒想法而走到這邊,建議看完想像以後再給自己一次機會試一次。
class Solution:
def thirdMax(self, nums: List[int]) -> int:
# 宣告三個變數,分別為第一、第二、第三大的數字
first = nums[0] # 可以直接先把nums中第一個數字給最大的位置
second = None
third = None
# 因已經先取出第一個數字放在第一大的位置了,因此從nums中第二個數字開始走
for i in range(1, len(nums)):
# 過濾相同的數字,出現過數字的不處理
if nums[i] == first or nums[i] == second or nums[i] == third:
continue
# 如果現在數字比第一個大,讓第一、第二數字往後退到第二、第三的位置以後
# 再將數字放在第一大的位置
if first < nums[i]:
third = second
second = first
first = nums[i]
continue
# 如果現在數字比第二個大,第一位置不動
# 第二位置數字移到第三位置,再將數字放在第二大的位置
if second == None or second < nums[i]:
third = second
second = nums[i]
continue
# 如果現在數字比第三個大,第一、第二位置不動
# 直接將第三數字換成現在的值
if third == None or third < nums[i]:
third = nums[i]
continue
# 如第三位置有值,直接回傳第三大數字
# 如第三位置沒有值,代表過濾完不到三個數字,回傳最大數字
return third if third != None else first
若內容有什麼問題或建議歡迎一起交流:)
感謝您今天願意花時間看完這篇文章~~~~
Next:747. Largest Number At Least Twice of Others